#include <stdio.h>

struct TreeNode
{
    char left;
    char right;
} nodes[15];

int rootIndex;      // 根节点的下标
int leaves[15][15]; // 存储各层级的叶节点
int leafCount[15];  // 存储每层的叶节点数量

// 递归查找叶节点
void findLeaves(int nodeIndex, int level)
{ // nodeIndex 当前节点的下标，level 当前节点所在的层级
    if (nodes[nodeIndex].left == '-' && nodes[nodeIndex].right == '-')
    { // 若当前节点是叶节点，将该节点的下标存入leaves[level]
        leaves[level][leafCount[level]++] = nodeIndex;
        return;
    }

    // 递归查找左儿子节点
    if (nodes[nodeIndex].left != '-')
        findLeaves(nodes[nodeIndex].left - '0', level + 1);

    // 递归查找右儿子节点
    if (nodes[nodeIndex].right != '-')
        findLeaves(nodes[nodeIndex].right - '0', level + 1);
}

int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    { // 输入每个节点的左右儿子节点
        scanf(" %c %c", &nodes[i].left, &nodes[i].right);
    }

    int hasParent[15] = {0}; // 标记节点是否有父节点

    // 遍历每个节点的左右儿子节点，标记它们为 有父节点
    for (int i = 0; i < n; i++)
    {
        if (nodes[i].left != '-')
            hasParent[nodes[i].left - '0'] = 1;
        if (nodes[i].right != '-')
            hasParent[nodes[i].right - '0'] = 1;
    }

    // 查找根节点：根节点没有父节点
    for (int i = 0; i < n; i++)
    {
        if (!hasParent[i])
        {
            rootIndex = i;
            break;
        }
    }

    // 从根节点开始查找所有叶节点
    findLeaves(rootIndex, 1);

    // 输出结果
    int firstOutput = 0; // 控制打印格式
    for (int level = 1; level <= n; level++)
    { // 遍历每一层
        for (int j = 0; j < leafCount[level]; j++)
        {                    // 遍历当前层的叶节点
            if (firstOutput) // 仅第一次输出打印时不加空格
                printf(" ");
            else
                firstOutput = 1;
            printf("%d", leaves[level][j]);
        }
    }
    printf("\n");
    return 0;
}